package database

import (
	"log"
	"stacks/models"
)

// Migrate 数据库迁移
func Migrate() error {
	err := DB.AutoMigrate(
		&models.SysTenant{},
		&models.SysUser{},
		&models.SysRole{},
		&models.SysPermission{},
		&models.SysUserRole{},
		&models.SysRolePermission{},
		&models.SysAuditLog{},
		&models.SysMenu{},
	)

	if err != nil {
		return err
	}

	log.Println("数据库迁移完成")
	return nil
}

// CreateDefaultData 创建默认数据
func CreateDefaultData() error {
	// 创建默认租户
	defaultTenant := models.SysTenant{
		Name:        "默认租户",
		Description: "系统默认租户",
		Status:      1,
	}

	if err := DB.FirstOrCreate(&defaultTenant, models.SysTenant{Name: "默认租户"}).Error; err != nil {
		return err
	}

	// 创建默认管理员角色
	adminRole := models.SysRole{
		TenantModel: models.TenantModel{
			TenantID: defaultTenant.ID,
		},
		Name:        "超级管理员",
		Description: "系统超级管理员角色",
		Status:      1,
	}

	if err := DB.FirstOrCreate(&adminRole, models.SysRole{
		TenantModel: models.TenantModel{
			TenantID: defaultTenant.ID,
		},
		Name: "超级管理员",
	}).Error; err != nil {
		return err
	}

	// 创建默认管理员用户
	adminUser := models.SysUser{
		TenantModel: models.TenantModel{
			TenantID: defaultTenant.ID,
		},
		Username: "admin",
		Password: "admin123", // 实际项目中应该使用加密密码
		Email:    "admin@example.com",
		Realname: "系统管理员",
		Status:   1,
	}

	if err := DB.FirstOrCreate(&adminUser, models.SysUser{
		TenantModel: models.TenantModel{
			TenantID: defaultTenant.ID,
		},
		Username: "admin",
	}).Error; err != nil {
		return err
	}

	// 关联管理员用户和角色
	userRole := models.SysUserRole{
		TenantModel: models.TenantModel{
			TenantID: defaultTenant.ID,
		},
		UserID: adminUser.ID,
		RoleID: adminRole.ID,
	}

	if err := DB.FirstOrCreate(&userRole, models.SysUserRole{
		UserID: adminUser.ID,
		RoleID: adminRole.ID,
	}).Error; err != nil {
		return err
	}

	// 创建默认菜单数据
	if err := createDefaultMenus(defaultTenant.ID); err != nil {
		log.Printf("创建默认菜单失败: %v", err)
	}

	log.Println("默认数据创建完成")
	return nil
}

// createDefaultMenus 创建默认菜单数据
func createDefaultMenus(tenantID uint) error {
	// 系统管理菜单
	systemMenu := models.SysMenu{
		TenantModel: models.TenantModel{
			TenantID: tenantID,
		},
		Name:     "系统管理",
		Path:     "/system",
		Icon:     "system",
		ParentID: 0,
		OrderNo:  100,
		Status:   1,
	}

	if err := DB.FirstOrCreate(&systemMenu, models.SysMenu{
		TenantModel: models.TenantModel{
			TenantID: tenantID,
		},
		Name: "系统管理",
	}).Error; err != nil {
		return err
	}

	// 用户管理菜单
	userMenu := models.SysMenu{
		TenantModel: models.TenantModel{
			TenantID: tenantID,
		},
		Name:     "用户管理",
		Path:     "/system/user",
		Icon:     "user",
		ParentID: systemMenu.ID,
		OrderNo:  110,
		Status:   1,
	}

	if err := DB.FirstOrCreate(&userMenu, models.SysMenu{
		TenantModel: models.TenantModel{
			TenantID: tenantID,
		},
		Name: "用户管理",
	}).Error; err != nil {
		return err
	}

	// 角色管理菜单
	roleMenu := models.SysMenu{
		TenantModel: models.TenantModel{
			TenantID: tenantID,
		},
		Name:     "角色管理",
		Path:     "/system/role",
		Icon:     "role",
		ParentID: systemMenu.ID,
		OrderNo:  120,
		Status:   1,
	}

	if err := DB.FirstOrCreate(&roleMenu, models.SysMenu{
		TenantModel: models.TenantModel{
			TenantID: tenantID,
		},
		Name: "角色管理",
	}).Error; err != nil {
		return err
	}

	// 权限管理菜单
	permissionMenu := models.SysMenu{
		TenantModel: models.TenantModel{
			TenantID: tenantID,
		},
		Name:     "权限管理",
		Path:     "/system/permission",
		Icon:     "permission",
		ParentID: systemMenu.ID,
		OrderNo:  130,
		Status:   1,
	}

	if err := DB.FirstOrCreate(&permissionMenu, models.SysMenu{
		TenantModel: models.TenantModel{
			TenantID: tenantID,
		},
		Name: "权限管理",
	}).Error; err != nil {
		return err
	}

	log.Println("默认菜单数据创建完成")
	return nil
}
